home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 July / Macworld (1999-07).dmg / Shareware World / Info / For Developers / Mops 3.4.sea / Mops 3.4 release notes next >
Text File  |  1999-02-22  |  10KB  |  249 lines

  1. ==================   Mops 3.4  RELEASE NOTES   ===================
  2.  
  3.  
  4. Here is the usual "release notes" describing the changes from the previous
  5. Mops versions, so that those already using it don't have to wade through all
  6. the documentation (or have to read right through the huge manual!!!).
  7.  
  8. The date of this release is February 1999.  If you've received it more than 
  9. six months later, it might be an idea to check the Web site (see below) to 
  10. see if there's a later version.
  11.  
  12.  
  13. First, here are my contact details:
  14.  
  15. ------------------------------------------------------------------------
  16. Mike Hore        email:          mikeh@zeta.org.au
  17.                  Mops web page:  http://www.netaxs.com/~jayfar/mops.html
  18. snail-mail:                                                      _--_|\
  19.         Michael Hore                                            /      \
  20.         54 Frederick St,                                        \_.--._*
  21.         Sydenham  NSW  2044,                                          v
  22.         AUSTRALIA.
  23. ------------------------------------------------------------------------
  24.  
  25.  
  26.                             NEW FEATURES
  27.                             ============
  28.  
  29.  
  30. The main new features in this release are register temp objects, and
  31. initial support for the AltiVec vector processor that will be a part
  32. of the forthcoming G4 Macs.
  33.  
  34. These two features are actually interrelated.  A vector is a 128-bit
  35. object which may consiste of 16 bytes, 8 2-byte integers, 4 4-byte
  36. integers, or 4 32-bit floating point numbers.  The AltiVec processor
  37. has 32 vector registers, and a rich set of instructions that execute
  38. on all elements of a vector simultaneously.
  39.  
  40. So in Mops we needed a way of telling the compiler to compile vector
  41. instructions.  One way would have been to implement a vector stack,
  42. along the lines of the floating point stack, and let the compiler map
  43. stack elements to vector registers as we do with floating point.
  44.  
  45. However there is another way that is simpler.  We already have our
  46. temp object mechanism, but these temp objects were always in memory. 
  47. This limited the usefulness of our Float class, since a Float object
  48. was always in memory and thus would give worse performance than a
  49. normal floating point number on the FP stack, or a floating local. 
  50. But since temp objects are very like local variables, it made sense to
  51. allow a temp object to be instantiated in a register, if this makes
  52. sense for a particular object.  So this new feature is now available.
  53.  
  54.  
  55. REGISTER TEMP OBJECTS
  56. =====================
  57.  
  58. The new syntax is a straightforward extension of the temp object
  59. syntax:
  60.  
  61. : myDefn  { \ loc1 loc2 -- }
  62. temp{    register    int i1
  63.         register    var    v1
  64.         register    float f1
  65. }
  66.     ...
  67. ;
  68.  
  69.  
  70. The classes which may have register temp objects are those whose data
  71. will fit in a register.  These are: byte, ubyte, int, uint, var and
  72. float.  Also the new vector classes can be register temp objects.
  73.  
  74. If you specify "register" for any other object, it will be ignored. 
  75. You won't get an error message.  The same thing will happen if there
  76. aren't enough registers available, due to the number of locals or
  77. previously specified register temp objects.
  78.  
  79. The other point to note is that if a temp object is instantiated in a
  80. register, YOU CAN ONLY CALL INLINE METHODS ON THAT OBJECT.  You will
  81. get an error if you try to call any other method.
  82.  
  83. This makes sense if you think about it.  Within a non-inline method,
  84. the object's base address has to be available via the word ^BASE.  But
  85. an object in a register doesn't have a base address!  Rather, the
  86. compiler has to take special action while it's compiling a method
  87. call, to take account of the fact that the object is in a register
  88. rather than in memory as usual.  And it has to do this separately for
  89. each method invocation, since the referenced object won't always be in
  90. the same register.  The compiler can only do this if it has complete
  91. control of the whole method invocation, which can only happen if the
  92. method is inline.
  93.  
  94.  
  95. ALTIVEC SUPPORT
  96. ===============
  97.  
  98. This is provided in the file Vectors.
  99.  
  100. Here, and in the appropriate section of the manual, we assume some
  101. knowledge of the AltiVec processor and the instructions it provides. 
  102. There is plenty of information available via the Motorola AltiVec web
  103. page:
  104.  
  105. http://www.mot.com.SPS/PowerPC/AltiVec/
  106.  
  107. If you have a G3 Mac, you can download an AltiVec emulator from
  108. Apple's Altivec web page, which will let you at least test your code
  109. before the G4 Macs arrive, possibly halfway through this year:
  110.  
  111. http://developer.apple.com/hardware/altivec/index.html
  112.  
  113.  
  114. NOTE: the Mops AltiVec support is still very preliminary.  I don't
  115. have a G3 Mac, just occasional access to one at work, so I haven't
  116. been able to do much testing.  Also, not all the possible vector
  117. operations are supported yet.  I will attempt to fix these
  118. shortcomings by the time actual G4 hardware becomes available.  In the
  119. meantime, if you have a chance to try some of the vector classes, let
  120. me know of any problems you run into.  THere will certainly be some!
  121.  
  122.  
  123.  
  124. We provide separate vector classes for all the different
  125. vector types. This seems preferable to writing one vector class with
  126. an ivar specifying what the vector type is, so that we can easily map
  127. one of our vector classes on to successive sections of a longer vector
  128. in memory.  Thus the only ivar data in our vector classes is the
  129. 128-bit vector data itself.
  130.  
  131. The classes we provide are:
  132.  
  133. 4-byte integers:
  134.  
  135. Word_vector            uses modulo arithmetic
  136. UWord_vector        uses saturated arithmetic, unsigned 
  137. SWord_vector        uses saturated arithmetic, signed
  138.  
  139. 2-byte integers:
  140.  
  141. Int_vector            uses modulo arithmetic
  142. UInt_vector            uses saturated arithmetic, unsigned
  143. SInt_vector            uses saturated arithmetic, signed
  144.  
  145. 1-byte integers:
  146.  
  147. Byte_vector            uses modulo arithmetic
  148. UByte_vector        uses saturated arithmetic, unsigned
  149. SByte_vector        uses saturated arithmetic, signed
  150.  
  151. 4-byte floats:
  152.  
  153. Float_vector
  154.  
  155. We don't yet provide every vector operation defined for the AltiVec
  156. processor -- this will hopefully happen by the time the actual
  157. hardware is available.  For now, we provide methods to do the basic
  158. arithmetic and logical operations, as well as select, permute and
  159. splat.
  160.  
  161. The PowerPC assembler and disassembler have been augmented with all
  162. the AltiVec instructions.  These are all given in a big test
  163. definition in the file "vectors pasm test" in the "Module source"
  164. folder, so you can use that as a reference for the syntax.
  165.  
  166.  
  167.  
  168.                         "EXTRAS" FOLDER
  169.                         ===============
  170.  
  171. A very minor change is that the "System source" folder had a number of
  172. files in it which weren't part of the Mops system proper.  So to keep
  173. things more logical we now have a new "Extras" folder in the "Mops
  174. source" folder for these and any other files that don't really fit
  175. anywhere else.  Here you'll find files such as the prolog file for
  176. using the Forthe Subroutine Library, and the ANSI Forth prolog file.
  177.  
  178.  
  179.  
  180.                             BUGS FIXED
  181.                             ==========
  182. There are a whole swag of minor bugs that have been fixed with this
  183. release.  Most (but not all) have been posted on comp.lang.forth.mac.
  184.  
  185.  
  186.  
  187. 1.  J and K now work properly in PowerMops.
  188.  
  189. 2. ALERT" has now been revised to work in PowerMops.
  190.  
  191. 3. There was an obscure bug in which the GrafPort could be set wrongly
  192. when a new window was created in front of another window.  When any
  193. scroll bars in the back window were to be redrawn as empty recangles
  194. (since the window was becoming deactivated), this bug was causing them
  195. not to be redrawn.  Thanks to Michael Baron for tracking this
  196. one down!
  197.  
  198. 4.  SEND: in class Handle should have been locking the handle and
  199. restoring its original state at the end. Also we were sending SEND: to
  200. the stream instead of WRITE: - I hate to think what disasters this
  201. could have caused!
  202.  
  203. 5.  Occasionally a quoted string might not have come out as expected
  204. in PowerMops.  The cause was very obscure - for the record, the
  205. register containing the constant  data pointer was not being saved and
  206. restored over a  leaf call when the leaf proc had a local.  (You did
  207. want  to know, so I told you!!)
  208.  
  209. 6.  Clicks on scroll bars now work properly in PowerMops.  This
  210. relates to registers being set properly for callbacks.  I posted a fix
  211. on the newsgroup which works, but I've now done things a bit more
  212. cleanly, which means we can now have :ppc_procs in modules, which
  213. we couldn't before.
  214.  
  215. 7.  Tabs and comment lines in the Mops window now work as expected
  216. when you hilight a block of text and hit Enter.  Likewise these work
  217. properly when you do it in Quick Edit.
  218.  
  219. 8.  Doug Hoffman's QEConsole has been fixed, and is now part of the
  220. regular Mops distribution.
  221.  
  222. 9.  RECURSE didn't work properly in PowerMops when there were quoted
  223. strings in the definition.
  224.  
  225. 10. The length of filenames can now be up to 255 chars -- extra space
  226. is porvided in the File class.  Files specified by full pathname can
  227. get quite long.  Note that at present we make no attempt to resolve
  228. aliases in the pathnames.  I'm inclined to think that aliases and full
  229. pathnames don't really mix -- sort of two different philosophies.  I'm
  230. still thinking about this one.
  231.  
  232. 11. Versions of Mops released in the last year or so haven't been
  233. able to load or run on Macs with the 68000 chip (Mac Plus, SE,
  234. Classic).  Up to now I haven't had a convenient way to check this
  235. out, but I now have access to a Mac Plus with a hard disk, and
  236. have fixed the two problems.  There was an alignment bug causing
  237. an odd address trap (this doesn't trap on 68020's or later), and
  238. I was making the Mops window a color window, without testing if
  239. the machine supported color!
  240.  
  241.  
  242.  
  243. --------------------------------------------------------------------
  244.  
  245. As always, I hope you enjoy Mops!
  246.  
  247.  
  248. —-  Mike Hore            mikeh@zeta.org.au
  249.